001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Apr 27, 2003
005     * Time: 1:14:55 PM
006     */
007    
008    package EVolve.util.phasedetectors;
009    
010    import EVolve.visualization.XYViz.XYVisualization;
011    import EVolve.visualization.AxesPanel;
012    import EVolve.Scene;
013    import EVolve.util.HelperFuncs;
014    import javax.swing.*;
015    import java.awt.*;
016    
017    public class PhaseAddRemover extends Thread{
018        private XYVisualization workingViz;
019        private boolean bAdding;
020    
021        public void beginAdd() {
022            this.bAdding = true;
023            start();
024        }
025    
026        public void beginRemove() {
027            this.bAdding = false;
028            start();
029        }
030    
031        public void run() {
032            workingViz = HelperFuncs.getActiveXYViz();
033    
034            if (workingViz == null) return;
035    
036            Scene.getUIManager().enablePhaseDetectorButton(false);
037    
038            workingViz.freeze(true);
039            AxesPanel canvas = (AxesPanel)((JScrollPane)workingViz.getPanel()).getViewport().getView();
040            setCursor(canvas, false);
041    
042            while (workingViz.isFreezed()) {
043                try {
044                    sleep(100);
045                } catch (InterruptedException e) {
046                    break;
047                }
048            }
049    
050            setCursor(canvas, true);
051            int newPhase = getPhaseUnderMouse();
052    
053            if (newPhase >= 0) {
054                if (bAdding)
055                    workingViz.getPhaseDetector().addPhaseManually(newPhase+1);
056                else
057                    workingViz.getPhaseDetector().removePhaseManually(newPhase+1);
058            }
059    
060            Scene.getUIManager().enablePhaseDetectorButton(true);
061        }
062    
063        private void setCursor(JPanel panel, boolean reset) {
064            if (reset)
065                panel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
066            else
067                panel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
068        }
069    
070        private int getPhaseUnderMouse() {
071            XYVisualization visual = HelperFuncs.getActiveXYViz();
072    
073            if (visual == null) {
074                return -1;
075            }
076    
077            Point pt = visual.getMousePosition();
078            AxesPanel canvas = (AxesPanel)((JScrollPane)visual.getPanel()).getViewport().getView();
079    
080            return canvas.getImageX(pt.x);
081        }
082    }